import { defineStore } from 'pinia'
import { ref } from 'vue'
import { ElMessage } from 'element-plus'

// 内容状态存储（收藏和评论）
export const useContentStore = defineStore('content', () => {
  // 状态
  const favorites = ref(JSON.parse(localStorage.getItem('favorites') || '[]'))
  const comments = ref(JSON.parse(localStorage.getItem('comments') || '[]'))
  
  // 收藏相关操作
  // 获取收藏列表
  function getFavorites(page = 1, pageSize = 10) {
    // 模拟分页
    const start = (page - 1) * pageSize
    const end = start + pageSize
    const paginatedItems = favorites.value.slice(start, end)
    
    return {
      items: paginatedItems,
      total: favorites.value.length,
      page,
      pageSize
    }
  }
  
  // 添加收藏
  function addFavorite(article) {
    return new Promise((resolve) => {
      // 模拟API调用
      setTimeout(() => {
        // 检查是否已收藏
        const exists = favorites.value.some(item => item.id === article.id)
        
        if (exists) {
          ElMessage.warning('该文章已收藏')
          resolve(false)
          return
        }
        
        // 添加收藏时间
        const newFavorite = {
          ...article,
          favoriteTime: new Date().toISOString()
        }
        
        // 更新状态
        favorites.value = [newFavorite, ...favorites.value]
        saveFavorites()
        
        ElMessage.success('收藏成功')
        resolve(true)
      }, 500)
    })
  }
  
  // 取消收藏
  function removeFavorite(articleId) {
    return new Promise((resolve) => {
      // 模拟API调用
      setTimeout(() => {
        // 过滤掉要删除的收藏
        favorites.value = favorites.value.filter(item => item.id !== articleId)
        saveFavorites()
        
        ElMessage.success('已取消收藏')
        resolve(true)
      }, 500)
    })
  }
  
  // 评论相关操作
  // 获取评论列表
  function getComments(page = 1, pageSize = 10) {
    // 模拟分页
    const start = (page - 1) * pageSize
    const end = start + pageSize
    const paginatedItems = comments.value.slice(start, end)
    
    return {
      items: paginatedItems,
      total: comments.value.length,
      page,
      pageSize
    }
  }
  
  // 添加评论
  function addComment(comment) {
    return new Promise((resolve) => {
      // 模拟API调用
      setTimeout(() => {
        // 添加评论ID和时间
        const newComment = {
          ...comment,
          id: Date.now().toString(),
          createdAt: new Date().toISOString()
        }
        
        // 更新状态
        comments.value = [newComment, ...comments.value]
        saveComments()
        
        ElMessage.success('评论发表成功')
        resolve(newComment)
      }, 500)
    })
  }
  
  // 删除评论
  function removeComment(commentId) {
    return new Promise((resolve) => {
      // 模拟API调用
      setTimeout(() => {
        // 过滤掉要删除的评论
        comments.value = comments.value.filter(item => item.id !== commentId)
        saveComments()
        
        ElMessage.success('评论已删除')
        resolve(true)
      }, 500)
    })
  }
  
  // 辅助函数
  function saveFavorites() {
    localStorage.setItem('favorites', JSON.stringify(favorites.value))
  }
  
  function saveComments() {
    localStorage.setItem('comments', JSON.stringify(comments.value))
  }
  
  // 初始化模拟数据（仅用于演示）
  function initMockData() {
    // 如果本地存储中没有数据，则初始化一些模拟数据
    if (favorites.value.length === 0) {
      const mockFavorites = Array.from({ length: 15 }, (_, i) => ({
        id: `article-${i + 1}`,
        title: `测试文章标题 ${i + 1}`,
        cover: `https://picsum.photos/id/${i + 10}/300/200`,
        summary: `这是测试文章 ${i + 1} 的摘要内容，用于展示收藏列表的样式和功能。`,
        favoriteTime: new Date(Date.now() - i * 86400000).toISOString()
      }))
      
      favorites.value = mockFavorites
      saveFavorites()
    }
    
    if (comments.value.length === 0) {
      const mockComments = Array.from({ length: 15 }, (_, i) => ({
        id: `comment-${i + 1}`,
        articleId: `article-${i % 5 + 1}`,
        articleTitle: `测试文章标题 ${i % 5 + 1}`,
        content: `这是测试评论 ${i + 1} 的内容，用于展示评论列表的样式和功能。`,
        createdAt: new Date(Date.now() - i * 86400000).toISOString()
      }))
      
      comments.value = mockComments
      saveComments()
    }
  }
  
  // 初始化模拟数据
  initMockData()
  
  return {
    // 状态
    favorites,
    comments,
    
    // 收藏相关操作
    getFavorites,
    addFavorite,
    removeFavorite,
    
    // 评论相关操作
    getComments,
    addComment,
    removeComment
  }
})